package com.bwie.coupon.service.impl;

import com.bwie.common.core.domain.PageResult;
import com.bwie.common.security.utils.SecurityUtils;
import com.bwie.coupon.domain.dto.CouponExpiredDTO;
import com.bwie.coupon.domain.dto.CouponMerchantListDTO;
import com.bwie.coupon.domain.dto.MerchantAddCouponDTO;
import com.bwie.coupon.domain.po.MerchantCouponPo;
import com.bwie.coupon.domain.po.SelectSkuPo;
import com.bwie.coupon.domain.vo.MerchantCouponDetailVo;
import com.bwie.coupon.domain.vo.MerchantCouponVo;
import com.bwie.coupon.mapper.CouponMerchantMapper;
import com.bwie.coupon.service.CouponMerchantService;
import com.bwie.system.api.model.LoginUser;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
public class CouponMerchantServiceImpl implements CouponMerchantService {
    /**
     * 注入
     */
    @Autowired
    private CouponMerchantMapper mapper;

    /**
     * 商家分页条件查询优惠券
     * @param couponMerchantListDTO
     * @return
     */
    @Override
    public PageResult<MerchantCouponVo> getMerchantCouponList(CouponMerchantListDTO couponMerchantListDTO) {
        //获取登录用户
        LoginUser loginUser = SecurityUtils.getLoginUser();
        //开始分页
        PageHelper.startPage(couponMerchantListDTO.getPageNum(),couponMerchantListDTO.getPageSize());
        //查询数据
        List<MerchantCouponPo> list = mapper.getMerchantCouponList(couponMerchantListDTO,loginUser.getUserid());
        //创建返回值
        List<MerchantCouponVo> merchantCouponVos = new ArrayList<>();
        //循环
        list.forEach(merchantCouponPo -> {
            //创建MerchantCouponVo对象
            MerchantCouponVo merchantCouponVo = new MerchantCouponVo();
            //复制
            BeanUtils.copyProperties(merchantCouponPo,merchantCouponVo);
//            //判断状态并赋值
//            if (merchantCouponPo.getReviewStatus()==0){
//                merchantCouponVo.setReviewStatusName("待审核");
//            }else if (merchantCouponPo.getReviewStatus()==1){
//                merchantCouponVo.setReviewStatusName("已通过");
//            }else if (merchantCouponPo.getReviewStatus()==2){
//                merchantCouponVo.setReviewStatusName("已驳回");
//            }
//            //判断状态并赋值
//            if (merchantCouponPo.getState()==0){
//                merchantCouponVo.setStateName("进行中");
//            }else if (merchantCouponPo.getState()==1){
//                merchantCouponVo.setStateName("已失效");
//            }
            //获得优惠方式
            Integer preferentialType = mapper.getPreferentialTypeByCouponId(merchantCouponPo.getPreferentialTypeId());
            //赋值
            merchantCouponVo.setPreferentialType(preferentialType);
            //添加
            merchantCouponVos.add(merchantCouponVo);
        });
        //分页
        PageInfo<MerchantCouponPo> merchantCouponListPoPageInfo = new PageInfo<>(list);
        //返回
        return PageResult.toPageResult(merchantCouponListPoPageInfo.getTotal(),merchantCouponVos);
    }

    /**
     * 商家管理优惠券状态
     * @param couponExpiredDTO
     */
    @Override
    public void couponExpired(CouponExpiredDTO couponExpiredDTO) {
        //管理优惠券状态
        mapper.couponExpired(couponExpiredDTO);
    }

    /**
     * 商家删除优惠券
     * @param id
     */
    @Override
    public void delCoupon(Long id) {
        //查询优惠券
        MerchantCouponPo merchantCouponPo = mapper.getCouponById(id);
        //判断优惠券是否失效
        if (merchantCouponPo.getState()==0){
            //抛异常
            throw new RuntimeException("该优惠券仍有效");
        }
        //删除优惠券
        Integer i = mapper.delCoupon(id);
        //判断是否删除成功
        if (i<=0){
            //抛异常
            throw new RuntimeException("删除失败");
        }
    }

    /**
     * 商家查询优惠券详情
     * @param id
     * @return
     */
    @Override
    public MerchantCouponDetailVo getCouponDetail(Long id) {
        //创建返回值
        MerchantCouponDetailVo merchantCouponDetailVo = new MerchantCouponDetailVo();
        //查询优惠券详情
        MerchantCouponPo merchantCouponPo = mapper.getCouponById(id);
        //复制
        BeanUtils.copyProperties(merchantCouponPo,merchantCouponDetailVo);
        //判断该优惠券是否选择商品优惠券
        if (merchantCouponPo.getCouponType()==1){
            //查询选中的商品
            List<SelectSkuPo> list = mapper.getSelectSkuPoByCouponId(id);
            //复制
            merchantCouponDetailVo.setSkus(list);
        }
        //返回
        return merchantCouponDetailVo;
    }

    /**
     * 商家添加优惠券
     * @param merchantAddCoupon
     */
    @Transactional
    @Override
    public void merchantAddCoupon(MerchantAddCouponDTO merchantAddCoupon) {
        //添加优惠券类型表
        mapper.addCouponType(merchantAddCoupon);
        //获取登录对象
        LoginUser loginUser = SecurityUtils.getLoginUser();
        //赋值
        merchantAddCoupon.setSellerId(loginUser.getUserid().intValue());
        //添加优惠券
        mapper.addCoupon(merchantAddCoupon);
        //判断优惠券类型是否为选择商品类型
        if (merchantAddCoupon.getCouponType()==1){
            //循环
            merchantAddCoupon.getSkuIds().forEach(skuId ->{
                //添加优惠券sku中间表
                mapper.addCouponSku(merchantAddCoupon.getId(),merchantAddCoupon.getCouponAstrictNumber(),skuId);
            });
        }
    }
}
